#pragma once
#if defined(_MSC_VER)
#ifdef XCOM_EXPORTS
#define XCOM_API __declspec(dllexport)
#else
#define XCOM_API __declspec(dllimport)
#endif
#elif defined(__GNUC__)
    #define XCOM_API  __attribute__((visibility("default")))
#else
    #define XCOM_API
#endif
struct ssl_st;
class XCOM_API XSSL{
public:
    XSSL();
    ~XSSL();
    bool IsEmpty(){return ssl_==nullptr;}
    // 服务端用来接收ssl连接
    bool Accept();
    // socket已近建立连接，客户端用来处理ssl握手
    bool Connect();
    // 打印使用的加密算法
    void PrintCipher();
    // 打印对方的证书信息
    void PrintPeerCert();
    //
    int Read(char *buf,int len);
    //
    int Write(const char *buf,int len);
    //
    void Close();
    void set_ssl_(ssl_st *ssl){
        this->ssl_=ssl;
    }
    ssl_st *ssl(){
        return this->ssl_;
    }
private:
    ssl_st *ssl_;
    friend class XSSLCtx;
};